{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# CS245: Principles of Programming Languages\n", "\n", "Bryn Mawr College, Fall 2016 \n", "Department of Computer Science \n", "Professor Douglas Blank " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Overview\n", "\n", "An introduction to a wide range of topics relating to programming languages with an emphasis on abstraction and design. Design issues relevant to the implementation of programming languages are discussed, including a review and in-depth treatment of mechanisms for sequence control, the run-time structure of programming languages and programming in the large. The course has a strong lab component where students get to construct large programs in at least three different imperative programming languages.\n", "\n", "Focus this semester: the course will be divided into these goals:\n", "\n", "1. learn Python\n", "2. learn Scheme\n", "3. compare and contrast Python and Scheme language constructs\n", "4. implement Scheme in Python\n", "5. implement Python in Scheme\n", "6. design, build, and run your own language\n", "\n", "### 1.1 General information:\n", "\n", "**Course website**: http://cs.brynmawr.edu/cs245
\n", "**Class**: Mondays and Wednesdays, 2:40pm-4:00pm, Park Science Building, Room 336
\n", "**Lab**: Thursdays 10:10am-11:00pm, Park Science Building, Room 230
\n", "**Professor**: Douglas Blank, http://cs.brynmawr.edu/~dblank/
\n", "**Email**: dblank@cs.brynmawr.edu
\n", "**Office**: Park Science, Room 248
\n", "**Office phone**: (610)526-6501
\n", "**Office hours**: Tuesdays, 10am-noon
\n", "**Course Management System**: https://moodle.brynmawr.edu/course/view.php?id=3230" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Resources\n", "\n", "We will use the following resources for this course:\n", "\n", "1. Jupyter on Athena at Bryn Mawr College: https://athena.brynmawr.edu\n", "2. The Scheme Programming Language, fourth edition, by Kent Dybvig. Available online: http://www.scheme.com/tspl4/\n", "3. Handouts and outside readings that will be distributed in class and through Moodle\n", "4. [Notebooks](Notebooks)\n", "5. [Labs](Labs)\n", "\n", "To access the lab assignments, you need to do this once, in a notebook:\n", "\n", "```python\n", "%%file nbgrader_config.py\n", "\n", "c = get_config()\n", "c.NbGrader.course_id = \"cs245\"\n", "c.TransferApp.exchange_directory = \"/opt/nbgrader/exchange/\"\n", "```\n", "\n", "and this:\n", "\n", "```shell\n", "! nbgrader extension activate\n", "```\n", "At that point, an Assignments tab will open up in the Jupyter dashboard." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Schedule\n", "\n", "### 3.1 Calendar\n", "\n", "```\n", " October November December \n", "Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa \n", " 1 1 2 3 4 5 1 2 3 \n", " 2 3 4 5 6 7 8 6 7 8 9 10 11 12 4 5 6 7 8 9 10 \n", " 9 10 11 12 13 14 15 13 14 15 16 17 18 19 11 12 13 14 15 16 17 \n", "16 17 18 19 20 21 22 20 21 22 23 24 25 26 18 19 20 21 22 23 24 \n", "23 24 25 26 27 28 29 27 28 29 30 25 26 27 28 29 30 31 \n", "30 31 \n", "```\n", "\n", "### 3.2 Weekly Plan" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", " \n", " \n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "
DateTopic
Week 1
Aug 29, MonIntroductions and Overview
Aug 31, WedChapter 2: Python
Sep 1, ThuLab: Lab01: Python
Week 2
Sep 5, MonLabor Day: No classes
Sep 7, WedPython. Introduction to Python
Sep 8, ThuLab: Python Exam; assign Lab02: Scheme
Week 3
Sep 12, MonScheme. Thinking Recursively
Sep 14, WedScheme. Summary of Basic Scheme
Sep 15, ThuLab: No lab meeting (Doug out of town); Scheme Exam; assign Lab03
Week 4
Sep 19, MonAdding Functions and Variables to S-Calc
Sep 21, WedCompare and Contrast
Sep 22, ThuLab: Lab04
Week 5
Sep 26, MonImplementing Scheme in Python. Derivation of the Y-Combinator
Sep 28, WedImplementing Scheme in Python
Sep 29, ThuLab: Lab05
Week 6
Oct 3, MonImplementing Python in Scheme
Oct 5, WedImplementing Python in Scheme Adding Functions and Variables to S-Calc
Oct 6, ThuLab: Lab06
Week 7: Fall Break
Oct 10, MonNo class
Oct 12, WedNo class
Oct 13, ThuLab: No lab meeting
Week 8
Oct 17, MonCalysto Scheme
Oct 19, WedType Inference
Oct 20, ThuLab: Lab07
Week 9
Oct 24, MonSLLGen Parser
Oct 26, WedParsing in Python
Oct 27, ThuLab: Lab08: Project proposals
Week 10
Nov 7, MonExam
Nov 9, WedWork on project
Nov 10, ThuLab: Lab09
Week 11
Nov 14, MonHand back exams. Dynamic vs. Lexical Scope
Nov 16, WedLexical Address
Nov 17, ThuLab: work on project
Week 12
Nov 21, MonContinuation-Passing Style
Nov 23, WedNo class
Nov 24, ThuLab: No lab meeting
Week 13
Nov 28, MonStreams
Nov 30, WedTail-Call Optimization
Dec 1, ThuLab: work on project
Week 14
Dec 5, MonProject Presentations
Dec 7, WedProject Presentations
Dec 8, ThuLab: no lab meeting
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.3 Important Dates\n", "\n", "* Classes Begin (Bryn Mawr & Haverford), Monday, August 29, 2016\n", "* Labor Day: No Classes, Monday, September 5, 2016\n", "* Registration Ends, Wednesday, September 7, 2016\n", "* Fall Break begins after last class, Friday, October 7, 2016\n", "* CR/NC Sign Up Deadline (Semester Long Courses), Friday, October 7, 2016\n", "* Fall break ends, Sunday, October 16, 2016\n", "* Spring 2017 Preregistration Begins, Monday, November 14, 2016\n", "* Spring 2017 Preregistration Ends, Friday, November 18, 2016\n", "* Thanksgiving Break (begins after last class), Wednesday, November 23, 2016\n", "* Thanksgiving Break ends, Sunday, November 27, 2016\n", "* Last Day of Classes, Thursday, December 8, 2016\n", "* Reading Day, Friday, December 9, 2016\n", "* Self Scheduled Exams Begin, Saturday, December 10, 2016\n", "* Exams End at 12:30pm, Friday, December 16, 2016\n", "* Fall 2016 Final Grade due (by noon), Tuesday, January 3, 2017" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Grading\n", "\n", "Final grades will be calculated as a weighted average of all grades according to the following weights:\n", "\n", "* Python Exam: 10% (mastery: retake until satisfied)\n", "* Scheme Exam: 10% (mastery: retake until satisfied)\n", "* Labs: 45%\n", "* Final Exam: 20%\n", "* Project: 15%" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 1 }